In recent times, various data management systems have become the backbone of information technology and other systems. Virtually all businesses, consumers and other entities utilize some form of data management ranging from enterprises that manage huge sets of data, to individuals that desire to store a personal data, music or other information.
The use of transactions is a common form of accessing and modifying a data set. In this context, a transaction can be thought of as a unit of work performed on a piece of data such as a create, read, update or delete (CRUD) operation. Transactions provide reliable units of work that can allow correct recovery from failures and keep the data consistent, as well manage concurrency between multiple programs or threads accessing the data to provide isolation between those programs.
In order to maintain transaction isolation it is typically a requirement of a transactional system to provide some partial ordering of events. This ensures that transactions are processed in a reliable manner and removes interference (data inconsistency) between concurrent executions. One way to perform this ordering is to base them on a timestamp so that it can be determined which event has priority over another event. In a distributed system, however, it can be extremely difficult to base such ordering of events on a global timestamp because of the difficulties of keeping the distributed processes perfectly synchronized. It is thus desirable to address the issue of ordering of events for transactions within a distributed cache system.